package cn.com.mr01.lianxi.mr_lianxi_1501;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

/**
 * 拿到的数据<"1001",["1001	张三	9001	计算机科学与技术","1001","河北省	石家庄	裕华区"]>
 * 
 * <"1002","1002	李四	9002	计算机科学与技术">
 * 
 * 输出的数据<"1001	张三	9001	计算机科学与技术", >
 * 
 * @author yingfing
 * @date 2020年11月19日 @time 下午3:25:46
 */
public class IntSumReducer extends Reducer<Text, Text, Text, NullWritable> {

	Text k = new Text();

	@Override
	protected void reduce(Text key, Iterable<Text> values, Context context)
			throws IOException, InterruptedException {

		Iterator<Text> it = values.iterator();
		List<String> lists = new ArrayList<String>();
		while (it.hasNext()) {
			lists.add(it.next().toString());
		}
		// 记录总条数
		if (lists.size() == 2) {
			k.set(isNumeric(lists.get(0).toString().split("\t")[2]) ? lists
					.get(0) : lists.get(1));
			context.write(k, NullWritable.get());
		}
	}

	private boolean isNumeric(String str) {
		// 原本的API，觉得空格是true，小数是false
		if (str == null || str.trim().length() == 0 || str.startsWith(".")
				|| str.endsWith(".")) {
			return false;
		}
		int sz = str.length();
		//
		int pointCnt = 0;
		for (int i = 0; i < sz; i++) {
			if (Character.isDigit(str.charAt(i)) == false
					&& str.charAt(i) != '.') {
				return false;
			}
			if (str.charAt(i) == '.') {
				pointCnt++;
			}
			if (pointCnt > 1) {
				return false;
			}
		}
		return true;
	}
}
